<template>
  <!-- Root element of PhotoSwipe. Must have class pswp. -->
  <div :visible="globalPhoto.visible" class="pswp" tabindex="-1" role="dialog" aria-hidden="true" ref="wrap">
    <!-- Background of PhotoSwipe.
    It's a separate element as animating opacity is faster than rgba(). -->
    <div class="pswp__bg"></div>
    <!-- Slides wrapper with overflow:hidden. -->
    <div class="pswp__scroll-wrap">
      <!-- Container that holds slides.
      PhotoSwipe keeps only 3 of them in the DOM to save memory.
      Don't modify these 3 pswp__item elements, data is added later on. -->
      <div class="pswp__container">
        <div class="pswp__item"></div>
        <div class="pswp__item"></div>
        <div class="pswp__item"></div>
      </div>
      <!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
      <div class="pswp__ui pswp__ui--hidden">
        <div class="pswp__top-bar">
          <!--  Controls are self-explanatory. Order can be changed. -->
          <div class="pswp__counter"></div>
          <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
          <!-- <button class="pswp__button pswp__button--share" title="Share"></button> -->
          <!-- <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button> -->
          <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
          <!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
          <!-- element will get class pswp__preloader--active when preloader is running -->
          <div class="pswp__preloader">
            <div class="pswp__preloader__icn">
              <div class="pswp__preloader__cut">
                <div class="pswp__preloader__donut"></div>
              </div>
            </div>
          </div>
        </div>
        <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
          <div class="pswp__share-tooltip"></div>
        </div>
        <!-- <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)"></button> -->
        <!-- <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)"></button> -->
        <div class="pswp__caption">
          <div class="pswp__caption__center"></div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>

import { mapState, mapMutations } from 'vuex'
import PhotoSwipe from 'PhotoSwipe'
import PhotoSwipeUI_Default from 'PhotoSwipeUI_Default'

export default {

  name: 'index',

  computed: mapState({
    globalPhoto: state => state.globalPhoto
  }),

  methods: {
    ...mapMutations(['showGlobalPhoto', 'hideGlobalPhoto']),

    open: function () {
      const {
        data,
        options
      } = this.globalPhoto

      this.gallery = new PhotoSwipe(this.$refs.wrap, PhotoSwipeUI_Default, data, {
        getThumbBoundsFn: function(index) {

          // find thumbnail element
          const thumbnail = document.querySelectorAll('.content .van-col')[index]

          // get window scroll Y
          const pageYScroll = window.pageYOffset || document.documentElement.scrollTop 
          // optionally get horizontal scroll

          // get position of element relative to viewport
          const rect = thumbnail.getBoundingClientRect() 

          // w = width
          return {
            x:rect.left,
            y:rect.top + pageYScroll,
            w:rect.width
          }
        },
        showHideOpacity: true,

        ...options
      })

      this.gallery.listen('destroy', () => {
        this.close()
      })
      // this.gallery.listen('close', () => {
      //   this.close()
      // })

      this.gallery.init()
    },
    close: function () {
      if (!this.gallery) {
        return
      }

      this.hideGlobalPhoto()

      this.gallery.close()
    }
  },

  mounted: function () {
    const { visible } = this.globalPhoto

    if (visible) {
      this.open()
    }
  },
  beforeUpdate: function () {
    const { visible } = this.globalPhoto

    if (visible) {
      this.open()
    }
  }
}

</script>

<style lang="less">
  .pswp {
    position: absolute !important;
  }
</style>